# 1. 导入必需库（numpy用于数值计算，sklearn提供数据集和模型）
import numpy as np
from sklearn.datasets import make_classification  # 生成模拟分类数据（可替换为真实数据）
from sklearn.ensemble import RandomForestClassifier  # 示例模型（可替换为其他分类器如LogisticRegression）

# 2. 生成/定义数据（X为特征矩阵，Y为标签；需确保feature_importance与X特征数匹配）
# 生成模拟数据：1000个样本，10个特征，2分类（feature_importance长度=10）
X, Y = make_classification(n_samples=1000, n_features=10, n_classes=2, random_state=42)
# 分割训练集/测试集（按8:2比例）
Xtrain, Xtest = X[:800], X[800:]
Ytrain, Ytest = Y[:800], Y[800:]

# 3. 初始化模型并计算特征重要性（feature_importance需由模型生成，不可直接使用）
clf = RandomForestClassifier(random_state=42)  # 初始化模型（此处用随机森林示例）
clf.fit(Xtrain, Ytrain)  # 先训练模型，才能获取特征重要性
feature_importance = clf.feature_importances_  # 从训练好的模型中提取特征重要性

# 4. 原代码（特征排序、筛选Top5、重新训练并评估）
sorted_indices = np.argsort(feature_importance)
sorted_indices = list(sorted_indices)
sorted_indices.reverse()  # 反转后得到“重要性从高到低”的索引
fea = sorted_indices[:5]  # 筛选Top5重要特征的索引
Xtrain = Xtrain[:, fea]  # 训练集保留Top5特征
Xtest = Xtest[:, fea]     # 测试集保留Top5特征

# 用筛选后的数据重新训练模型并评估
clf.fit(Xtrain, Ytrain)
score = clf.score(Xtest, Ytest)  # 计算测试集准确率
print(score)